/**
 * 可以尽可能多的完成交易以获得最大利润，但不能同时参与多比交易（即不能在卖出前再次买入）
 * @param {number[]} prices 
 */

// 法1：只需要在上升的趋势中低点买入高点卖出，其他情况不操作即可
var maxProfit1 = function (prices) {
    if (prices.length === 0) {
        return 0
    }

    let profit = 0
    // 记录一段上升的趋势中的最低点和最高点，初始化为prices[0]
    let valley = prices[0]
    let peak = prices[0]
    let i = 0

    // price[i]要和price[i+1]比较
    while (i < prices.length - 1) {
        while (i < prices.length - 1 && prices[i] >= prices[i + 1]) {
            // 跌或者持平就不操作
            i++
        }
        // 跌完就会跳出上方循环，就获得低点
        valley = prices[i]
        while (i < prices.length - 1 && prices[i] <= prices[i + 1]) {
            i++
        }
        // 涨完就会跳出上方循环，就获得高点
        peak = prices[i]

        // 累计本次上升趋势的利润，直到循环结束
        profit += peak - valley
    }

    return profit
}

// 法2：计算每天的利润，涨了就算进利润
var maxProfit2 = function (prices) {
    if (prices.length === 0) {
        return 0
    }

    let profit = 0
    for (let i = 0; i < prices.length - 1; i++) {
        if (prices[i] < prices[i + 1]) {
            profit += (prices[i + 1] - prices[i])
        }
    }

    return profit
}